import java.util.ArrayList;
import java.util.List;

/**
 * 基础类
 * Student
 * 属性：name age score
 * 要求
 * 将学⽣按照姓名降序、age升序，成绩降序保存到集合中
 * 并且名字叫tom的学⽣不管考多少分都位于班级的第⼀位
 * 分别使用自然排序和比较器排序实现
 */
public class Test2 {
    public static void main(String[] args) {

        // 创建学生列表
        List<Student> students = new ArrayList<>();
        students.add(new Student("tom", 20, 60));
        students.add(new Student("sss", 21, 85));
        students.add(new Student("sss", 21, 83));
        students.add(new Student("sss", 20, 80));
        students.add(new Student("bss", 20, 80));

        // 排序学生列表
        sortStudents(students);

        // 输出结果
        System.out.println("排序结果:");
        for (Student s : students) {
            System.out.println(s.name + "(" + s.age + "岁, " + s.score + "分)");
        }
    }

    // 自定义排序方法
    public static void sortStudents(List<Student> students) {
        int n = students.size();
        // 简单选择排序实现
        for (int i = 0; i < n - 1; i++) {
            int minIndex = i;
            for (int j = i + 1; j < n; j++) {
                if (shouldSwap(students.get(minIndex), students.get(j))) {
                    minIndex = j;
                }
            }
            // 交换元素
            Student temp = students.get(i);
            students.set(i, students.get(minIndex));
            students.set(minIndex, temp);
        }
    }

    // 判断是否应该交换两个学生的位置
    private static boolean shouldSwap(Student s1, Student s2) {
        // 规则1: tom优先排在前面
        boolean isTom1 = "tom".equals(s1.name);
        boolean isTom2 = "tom".equals(s2.name);

        if (isTom1 && !isTom2) return false; // s1是tom，不交换
        if (!isTom1 && isTom2) return true;  // s2是tom，需要交换

        // 规则2: 姓名降序
        if (!s1.name.equals(s2.name)) {
            return s1.name.compareTo(s2.name) < 0;
        }

        // 规则3: 年龄升序
        if (s1.age != s2.age) {
            return s1.age > s2.age;
        }

        // 规则4: 成绩降序
        return s1.score < s2.score;
    }

}